package com.tich.ai.domain.entity;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * 大模型对话实体类
 * */
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL) // 不序列化null字段
@NoArgsConstructor
@AllArgsConstructor
public class ChatInfo {
    /**
     * 模型名称（必须显式指定）
     */
    @JsonProperty("model")
    @Builder.Default
    private String model = "deepseek-ai/DeepSeek-V3";

    /**
     * 是否流式输出，默认关闭
     */
    @JsonProperty("stream")
    @Builder.Default
    private Boolean stream = true;

    /**
     * 最大生成token数，默认512
     */
    @JsonProperty("max_tokens")
    @Builder.Default
    private Integer maxTokens = 512;

    /**
     * 启用思维链模式，默认启用
     */
    @JsonProperty("enable_thinking")
    @Builder.Default
    private Boolean enableThinking = true;

    /**
     * 思维预算token数，默认4096
     */
    @JsonProperty("thinking_budget")
    @Builder.Default
    private Integer thinkingBudget = 4096;

    /**
     * 最小采样概率，默认0.05
     */
    @JsonProperty("min_p")
    @Builder.Default
    private Double minP = 0.05;

    /**
     * 温度参数，默认0.7
     */
    @JsonProperty("temperature")
    @Builder.Default
    private Double temperature = 0.7;

    /**
     * 核心采样概率，默认0.7
     */
    @JsonProperty("top_p")
    @Builder.Default
    private Double topP = 0.7;

    /**
     * 采样候选数，默认50
     */
    @JsonProperty("top_k")
    @Builder.Default
    private Integer topK = 50;

    /**
     * 重复惩罚系数，默认0.5
     */
    @JsonProperty("frequency_penalty")
    @Builder.Default
    private Double frequencyPenalty = 0.5;

    /**
     * 生成结果数，默认1
     */
    @JsonProperty("n")
    @Builder.Default
    private Integer n = 1;

    /**
     * 停止词列表，默认空列表
     */
    @JsonProperty("stop")
    @Builder.Default
    private List<String> stop = new ArrayList<>();

    /**
     * 消息历史记录
     */
    @JsonProperty("messages")
    private List<Message> messages;


}

